MongoDB-তে Aggregation Framework একটি শক্তিশালী বৈশিষ্ট্য, যা ব্যবহারকারীদের ডেটা ম্যানিপুলেশন এবং বিশ্লেষণের জন্য একাধিক ধাপ (stages) চালানোর অনুমতি দেয়। এটি SQL এর GROUP BY, JOIN, এবং HAVING এর মতো কাজ করতে সক্ষম, তবে MongoDB-তে এটি একটি খুবই দক্ষ পদ্ধতি যা ডেটা ফিল্টার, গ্রুপ, সাজানো, ট্রান্সফর্মেশন ইত্যাদি সম্পন্ন করতে ব্যবহৃত হয়।
MongoDB তে, aggregation এমন একটি প্রক্রিয়া, যেখানে ডেটা বিভিন্ন স্টেজের মাধ্যমে প্রক্রিয়া করা হয় এবং শেষ পর্যন্ত একটি নির্দিষ্ট ফলাফল পাওয়া যায়। এই প্রক্রিয়াটি খুবই গুরুত্বপূর্ণ যখন ডেটাবেস থেকে জটিল রিপোর্ট বা বিশ্লেষণমূলক ডেটা বের করতে হয়।
Aggregation Framework কি?
MongoDB Aggregation Framework হল একটি পদ্ধতি যার মাধ্যমে আপনি বিভিন্ন operations প্রয়োগ করে ডেটাকে বিশ্লেষণ এবং প্রক্রিয়া করতে পারেন। MongoDB এর Aggregation Framework এর কিছু জনপ্রিয় ব্যবহার হল:
- Grouping: ডেটাকে নির্দিষ্ট ফিল্ড অনুযায়ী গ্রুপ করা।
- Sorting: ডেটাকে কোনো নির্দিষ্ট ক্রমে সাজানো।
- Filtering: ডেটা থেকে কিছু নির্দিষ্ট মান নির্বাচন করা।
- Projection: ডেটার কিছু নির্দিষ্ট অংশ নির্বাচন করা।
- Lookup: অন্য collection এর সাথে data join করা (এটি SQL এর
JOINএর সমতুল্য)।
MongoDB-তে aggregation সাধারণত aggregate() মেথড ব্যবহার করে করা হয়।
Aggregation Framework এর মুল স্টেজগুলো:
MongoDB Aggregation Framework সাধারণত stages এর মাধ্যমে কাজ করে, এবং প্রতিটি স্টেজ ডেটার ওপর একটি নির্দিষ্ট কাজ করে। কিছু সাধারণ স্টেজ হল:
- $match: ডেটাকে ফিল্টার করা (SQL এর
WHEREএর মতো) - $group: ডেটাকে গ্রুপ করা (SQL এর
GROUP BYএর মতো) - $project: ডেটা ফিল্ডের কিছু নির্দিষ্ট অংশ নির্বাচন করা
- $sort: ডেটাকে সাজানো
- $limit: একটি নির্দিষ্ট সংখ্যক ডকুমেন্ট নির্বাচন করা
- $skip: ডেটার মধ্যে থেকে কিছু ডকুমেন্ট বাদ দেওয়া
- $lookup: অন্যান্য collection এর সাথে ডেটা যোগ করা (SQL এর
JOINএর মতো)
Aggregation Framework কেন প্রয়োজন?
MongoDB তে Aggregation Framework প্রয়োজনীয় কারণ এটি অনেক শক্তিশালী এবং নমনীয় ডেটা বিশ্লেষণ সরঞ্জাম প্রদান করে। এর মাধ্যমে আপনি খুব দ্রুত ডেটার উপর জটিল কাজ করতে পারেন যা সাধারণত SQL ডাটাবেসে আরও বেশি প্রচেষ্টা ও সময় নেয়।
Aggregation Framework এর সুবিধা:
- Complex Queries: এটি আপনার ডেটার উপর জটিল প্রশ্ন যেমন গ্রুপিং, সোর্টিং, ফিল্টারিং ইত্যাদি কার্যকরভাবে চালাতে সাহায্য করে।
- Performance: MongoDB-তে aggregation উচ্চ পারফরম্যান্সে কাজ করে কারণ এটি ইনডেক্স ব্যবহার করে এবং পুরো ডেটাবেস স্ক্যান না করে।
- Flexible Data Processing: ডেটাকে বিভিন্ন স্টেজের মাধ্যমে প্রক্রিয়া করা সম্ভব, যা বিভিন্ন ধরনের ডেটা বিশ্লেষণের জন্য উপযোগী।
- Join Support: MongoDB aggregation এর মাধ্যমে
$lookupস্টেজ ব্যবহার করে একাধিক collection এর মধ্যে যোগফল (join) করা সম্ভব, যা SQL এরJOINএর সমতুল্য।
Aggregation Framework এর উদাহরণ
এখন চলুন কিছু উদাহরণের মাধ্যমে MongoDB Aggregation Framework কীভাবে কাজ করে তা দেখি।
1. $match স্টেজ (Filtering Data)
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
public class AggregationExample {
public static void main(String[] args) {
// MongoDB ক্লায়েন্ট তৈরি
MongoClient mongoClient = new MongoClient("localhost", 27017);
// ডাটাবেস নির্বাচন
MongoDatabase database = mongoClient.getDatabase("testdb");
// কোলেকশন নির্বাচন
MongoCollection<Document> collection = database.getCollection("users");
// Aggregation Pipeline: $match স্টেজ (ফিল্টারিং)
AggregateIterable<Document> result = collection.aggregate(
Arrays.asList(
new Document("$match", new Document("age", new Document("$gt", 30))) // Filter users where age > 30
)
);
// ফলাফল প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
2. $group স্টেজ (Grouping Data)
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class GroupByExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("testdb");
MongoCollection<Document> collection = database.getCollection("users");
// Aggregation Pipeline: $group স্টেজ (গ্রুপিং)
AggregateIterable<Document> result = collection.aggregate(
Arrays.asList(
new Document("$group", new Document("_id", "$age") // Group by age
.append("count", new Document("$sum", 1))) // Count users for each age
)
);
// ফলাফল প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
3. $lookup স্টেজ (Join Data from Another Collection)
MongoDB-তে আপনি $lookup স্টেজ ব্যবহার করে দুটি collection এর মধ্যে join করতে পারেন, যা SQL এর JOIN এর মতো কাজ করে।
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class LookupExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("testdb");
MongoCollection<Document> collection1 = database.getCollection("orders");
MongoCollection<Document> collection2 = database.getCollection("products");
// Aggregation Pipeline: $lookup স্টেজ (JOIN)
AggregateIterable<Document> result = collection1.aggregate(
Arrays.asList(
new Document("$lookup", new Document("from", "products") // Join with 'products' collection
.append("localField", "product_id")
.append("foreignField", "_id")
.append("as", "productDetails"))
)
);
// ফলাফল প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
MongoDB তে Aggregation Framework হল একটি অত্যন্ত শক্তিশালী এবং নমনীয় টুল যা আপনাকে complex queries, data transformations, grouping, filtering, এবং sorting সহ অনেক ধরনের কাজ করতে সাহায্য করে। $match, $group, $sort, $lookup সহ আরও অনেক স্টেজ MongoDB তে ডেটা বিশ্লেষণ এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়।
- $match: ডেটা ফিল্টার করতে ব্যবহৃত হয়।
- $group: ডেটাকে গ্রুপ করার জন্য ব্যবহৃত হয়।
- $lookup: অন্য collection এর সাথে ডেটা join করতে ব্যবহৃত হয়।
এটি আপনাকে SQL এর মতো কাজ করতে সক্ষম করে, তবে MongoDB এর একটি নেটিভ এবং দ্রুতগতির পদ্ধতি হিসেবে এটি কাজ করে, যা বড় ডেটাসেটের সাথে খুব কার্যকরী।
Read more